/* 
宏任务和微任务:
    -异步代码有优先级关系,分为宏任务和微任务代码.微任务优先级高先执行,宏任务优先级低后执行.
    -宏任务是由宿主(浏览器)发起的:包括整体代码script,setTimeout,setInterval等等
    -微任务是js自身发起的:Promise.then/catch/finally,process.nextTick,queueMicrotask
    await后面的语句和promise.then是一样的



    (js是单线程的,所有的代码都需要在js单线程上执行,但是浏览器是多线程的,浏览器可以开启多个模块帮js管理代码,但是代码只能在js的单线程中执行)

    浏览器事件轮询执行过程:
        -执行栈选择最先进入队列的宏任务(一般都是script),执行其同步代码直至结束
        -在执行同步代码的过程中,如果遇到宏任务,则把宏任务交给浏览器对应的管理模块(DOM管理模块,ajax管理模块,定时器管理模块)进行管理,当宏任务的回调队列需要被执行的时候,会把回调函数放入回调队列(callBack queue)中等待执行
        -如果遇到微任务,则直接把微任务放到微任务队列等待执行
        -当同步代码执行完成,先清空微任务队列,然后去宏任务队列中执行宏任务,每执行完一个宏任务都会再去清空微任务队列

*/